package com.itheima.controller;

import com.itheima.aspect.Log;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 *
 */
@RestController/*将响应内容变为JSON内容格式*/
@RequestMapping("/depts")//统一路径，避免重复编写，便于阅读
@Slf4j
public class DeptController {
    @Autowired
    private DeptService deptService;
    @GetMapping
    public Result getDeptList(){
        List<Dept> deptList =  deptService.getDeptList();//调用相应处理请求的方法，得到响应结果
        return Result.success(deptList);//返回响应结果
    }


    /**
     * 删除部门
     * del方法的参数与前端请求参数相同，可省略@RequestParam注解
     * @param id
     * @return
     */
    /*@DeleteMapping("/depts")
    public Result delDept(Integer id){
        System.out.println("id = " + id);
        return Result.success();
    }*/




    /**
     * 使用HttpServletRequest接收参数
     * @param request
     * @return
     */
 /*   @DeleteMapping("/depts")
    public Result delDept(HttpServletRequest request){
        String parameter = request.getParameter("id");
        int IdInt = Integer.parseInt(parameter);
        System.out.println("IdInt = " + IdInt);
        return Result.success();
    }*/




    /**
     * 使用@RequestParam注解能够识别并接收前端请求的id参数，参数名要与前端相同，required可设置是否必须有该参数，默认为true
     * @param id
     * @return
     */
    @DeleteMapping
    @Log
    public Result delDept(@RequestParam(value = "id",required = false) Integer id){
        log.info("id = {}",id);
        deptService.delDept(id);
        return Result.success();
    }

    /**
     * 新增部门
     * 使用Post方法，前端传递一个JSON类型数据，使用@RequestBody将JSON转化为Dept类型的对象
     * @ResponseBody:将对象转为JSON
     * @param dept
     * @return
     */
    @PostMapping
    @Log
    public Result addDept(@RequestBody Dept dept){
        log.info("dept = {}",dept);
        /**
         * 将前端JSON转为Dept类型对象作为参数供Service层对象使用其方法对其进行业务逻辑实现
         */
        deptService.addDept(dept);
        return Result.success();
    }


    /**
     * 修改部门名称接口前的回显
     * @PathVariable：能够从路径中得到所传递的id参数并将其赋值给Integer类型的id
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result getDeptById(@PathVariable Integer id){
        log.info("id={}",id);
        Dept dept =  deptService.getDeptById(id);
        return Result.success(dept);
    }

    /**
     * 修改部门名称
     * @param dept
     * @return
     */
    @PutMapping
    @Log
    public Result modifyDept(@RequestBody Dept dept){
        log.info("dept = {}",dept);
        deptService.modifyDept(dept);
        return Result.success();
    }
}

